package dao;

import java.util.Date;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import modelo.Equipe;
import modelo.Gol;
import modelo.Jogo;
import conexao.ConnectionManager;

public class JogoDaoImp extends GenericHibernateDao<Jogo> implements JogoDAO {

	private EntityManager manager;

	public JogoDaoImp() {
		manager = ConnectionManager.getEntityManager();
	}

	@Override
	public List<Jogo> buscarTodos() {
		Query query = manager.createNamedQuery("Jogo.buscarTodos");

		List<Jogo> jogos = query.getResultList();
		return jogos;
	}

	@Override
	public Jogo buscarPorId(long id) {
		return manager.find(Jogo.class, id);
	}

	@Override
	public List<Jogo> buscarPorEquipe(Equipe equipe) {
		Query query = manager.createNamedQuery("Jogo.buscarPorEquipe");
		query.setParameter("equipe", equipe);
		List<Jogo> jogos = query.getResultList();
		return jogos;
	}

	@Override
	public List<Jogo> buscarPorData(Date data) {
		Query query = manager.createNamedQuery("Jogo.buscarPorData");
		query.setParameter("data", data);
		List<Jogo> jogos = query.getResultList();
		return jogos;
	}

	@Override
	public List<Jogo> buscarPorEstadio(String estadio) {
		Query query = manager.createNamedQuery("Jogo.buscarPorEstadio");
		query.setParameter("estadio", estadio);
		List<Jogo> jogos = query.getResultList();
		return jogos;
	}

	@Override
	public List<Jogo> buscarPorGol(Gol gol) {
		Query query = manager.createNamedQuery("Jogo.buscarPorGol");
		query.setParameter("gol", gol);
		try {
			return ((List<Jogo>) query.getResultList());
		} catch (IndexOutOfBoundsException e) {
			return null;
		}
	}
}
